// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#pragma once

#include <fbl/vector.h>
#include <perftest/perftest.h>

namespace perftest {
namespace internal {

// Definitions used by the perf test runner.  These are in a header file so
// that the perf test runner can be tested by unit tests.

struct NamedTest {
  fbl::String name;
  fbl::Function<TestFunc> test_func;
};

typedef fbl::Vector<NamedTest> TestList;

bool RunTests(const char* test_suite, TestList* test_list, uint32_t run_count,
              const char* regex_string, FILE* log_stream, ResultsSet* results_set,
              bool quiet = false);

struct CommandArgs {
  const char* output_filename = nullptr;
  // Note that this default matches any string.
  const char* filter_regex = "";
  uint32_t run_count = 1000;
  bool quiet = false;
  bool enable_tracing = false;
  double startup_delay_seconds = 0;
};

void ParseCommandArgs(int argc, char** argv, CommandArgs* dest);

}  // namespace internal
}  // namespace perftest
